package impl;

import templ.AbstractManager;

/**
 * A classe Manager é a responsável por verificar a integridade dos dados de entrada no sistema
 * @author Lucas
 */
public class Manager extends AbstractManager {

    /**
     * O valor que corresponde ao campo nome
     */
    public static int NAME_FIELD = 1;
    /**
     * O valor que corresponde ao campo idade
     */
    public static int AGE_FIELD = 2;
    /**
     * O valor que corresponde ao campo salário
     */
    public static int SALARY_FIELD = 3;
    /**
     * O valor que corresponde ao campo número de dependentes
     */
    public static int NUM_RELATIVES_FIELD = 4;
    /**
     * O valor que corresponde ao campo ID de uma pessoa
     */
    public static int PERSON_ID_FIELD = 5;

    public Manager() {
    }

    @Override
    public boolean isNotEmpty(String... fields) {
        return super.isNotEmpty(fields);
    }

    @Override
    public boolean isValidField(int fieldType, String content) {
        boolean valid = true;

        switch (fieldType) {
            case 1: {
                if (content == null || content.isEmpty() || content.length() > MAX_STRING_SIZE || content.matches("^.*[0-9].*$")) {
                    valid = false;
                }
                break;
            }
            case 2: {
                int age = 0;
                try {
                    age = Integer.parseInt(content);
                    if (age <= MIN_AGE || age > MAX_AGE) {
                        valid = false;
                    }
                } catch (NumberFormatException e) {
                    valid = false;
                }
                break;
            }
            case 3: {
                double salary = 0;
                try {
                    salary = Double.parseDouble(content);
                    if (salary <= MIN_SALARY || salary > MAX_SALARY) {
                        valid = false;
                    }
                } catch (NumberFormatException e) {
                    valid = false;
                }
                break;
            }
            case 4: {
                int relatives = 0;
                try {
                    relatives = Integer.parseInt(content);
                    if (relatives <= MIN_RELATIVES) {
                        valid = false;
                    }
                } catch (NumberFormatException e) {
                    valid = false;
                }
                break;
            }
            case 5: {
                //verifica se o id está em um formato válido
                int id = 0;
                try {
                    id = Integer.parseInt(content);
                    if (id < 0) {
                        valid = false;
                    }
                } catch (NumberFormatException e) {
                    valid = false;
                }
                break;
            }
        }
        return valid;
    }
}
